import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:manual/getxs/vip_controller.dart';
import 'package:manual/utils/logger.dart';
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';

class MinePage extends StatefulWidget {
  const MinePage({super.key});

  @override
  State<MinePage> createState() => _MinePageState();
}

class _MinePageState extends State<MinePage> with SingleTickerProviderStateMixin {

  final VipController controller = Get.put(VipController()); // 注入控制器
  late AnimationController _controller;
  Map<String, dynamic>? userInfo;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(vsync: this);
    _loadUserInfo(); // 加载用户信息
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  /// 从 SharedPreferences 加载用户信息
  Future<void> _loadUserInfo() async {
    final prefs = await SharedPreferences.getInstance();
    final userInfoString = prefs.getString('userInfo');

    if (userInfoString != null) {
      setState(() {
        userInfo = jsonDecode(userInfoString);
      });
    } else {
      // 如果没有找到数据，可以初始化默认值
      setState(() {
        userInfo = {
          "userId": "未设置",
          "age": "未设置",
          "token": "未设置",
          "avatar": "lib/assets/images/common/icon.png",
        };
      });
    }
  }

   /// 修改用户 ID 为 1010
  Future<void> _updateUserId() async {
    final prefs = await SharedPreferences.getInstance();
    // 更新 userInfo 的 userId
    if (userInfo != null) {
      userInfo!['userId'] = 1010;

      // 将更新后的 userInfo 存储到 SharedPreferences
      await prefs.setString('userInfo', jsonEncode(userInfo));

      // 刷新界面
      setState(() {});
      // 慎用
      // 只能在 StatefulWidget 的 State 中使用：
      // setState 是 State 类的一部分，只能在 StatefulWidget 的 State 类中使用。
      // 如果是 StatelessWidget，则不能使用 setState，需要通过父级传递状态管理。
      // 避免无效的 setState 调用：
      // 只更新真正需要变化的部分，避免不必要的重新构建（例如，不要直接在根节点调用 setState 以避免整个页面重建）。
      // 不要在构造函数或 build 方法中调用 setState，会导致循环重建。
    }
  }


  
  Future<void> _log(String type) async {
    if(type == 'warn'){
      Logger.warn('{"name": "John", "age": 30, "city": "New York"}', tag: "Valid JSON");
    }else if(type == 'debug') {
      Logger.debug('{"person": {"name": "Alice", "details": {"age": 25, "hobbies": ["reading", "traveling"]}}}', tag: "Nested JSON");
    }else{
      try {
      // 模拟一个报错的代码
      int result = 10 ~/ 0; // 故意制造一个除零异常
      Logger.info('结果: $result', tag: '测试日志');
    } catch (error, stackTrace) {
        // 捕获错误并记录日志
        Logger.error(
          '发生错误: $error',
          tag: '测试日志',
          error: error,
          stackTrace: stackTrace,
        );
      }
    }
  }



  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: null,
      body: userInfo == null? 
        const Center(child: CircularProgressIndicator()) : 
        Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              const Text(
                '用户信息：',
                style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 16),
              Text('用户 ID: ${userInfo?['userId'] ?? '未设置'}'),
              Text('年龄: ${userInfo?['age'] ?? '未设置'}'),
              Text('Token: ${userInfo?['token'] ?? '未设置'}'),
              const SizedBox(height: 16),
              const Text('头像：'),
              const SizedBox(height: 8),
              userInfo?['avatar'] != null
                  ? Image.asset(
                      userInfo!['avatar'],
                      width: 100,
                      height: 100,
                      fit: BoxFit.cover,
                    )
                  : const Text('未设置头像'),
                    const SizedBox(height: 32),
              ElevatedButton(
                onPressed: _updateUserId,
                child: const Text('修改用户 ID 为 1010'),
              ),
              ElevatedButton(
                onPressed:()=> _log("error"),
                child: const Text('Error Logger'),
              ),
              ElevatedButton(
                onPressed:()=> _log("warn"),
                child: const Text('Warn Logger'),
              ),
              ElevatedButton(
                onPressed:()=> _log("debug"),
                child: const Text('Debug Logger'),
              ),
              Obx(() => Text('会员名: ${controller.vipName.value}', style: const TextStyle(fontSize: 20))),
              Obx(() => Text('会员时间: ${controller.vipTime.value} 天', style: const TextStyle(fontSize: 20))),
              ElevatedButton(
                onPressed: () => controller.rechargeVipTime(30), // 充值30天
                child: const Text('充值 30 天'),
              ),
            ],
          ),
      ),
    );
  }
}
